package com.example.demo.service;

import com.example.demo.entity.Tag;

import java.util.List;

/**
 * 标签服务接口
 * 定义标签相关业务操作
 */
public interface TagService {
    
    /**
     * 根据ID获取标签
     * @param id 标签ID
     * @return 标签信息
     */
    Tag getTagById(Long id);
    
    /**
     * 根据名称获取标签
     * @param name 标签名称
     * @return 标签信息
     */
    Tag getTagByName(String name);
    
    /**
     * 获取所有标签列表
     * @return 标签列表
     */
    List<Tag> getAllTags();
    
    /**
     * 获取热门标签列表
     * @param limit 数量限制
     * @return 热门标签列表
     */
    List<Tag> getPopularTags(int limit);
    
    /**
     * 根据名称列表获取或创建标签
     * @param tagNames 标签名称列表
     * @return 标签列表
     */
    List<Tag> getOrCreateTags(List<String> tagNames);
    
    /**
     * 创建标签
     * @param tag 标签信息
     * @return 创建的标签
     */
    Tag createTag(Tag tag);
    
    /**
     * 更新标签
     * @param tag 标签信息
     * @return 更新后的标签
     */
    Tag updateTag(Tag tag);
    
    /**
     * 删除标签
     * @param id 标签ID
     * @return 是否成功
     */
    boolean deleteTag(Long id);
    
    /**
     * 增加标签使用次数
     * @param tagId 标签ID
     * @param increment 增加数量
     */
    void incrementArticleCount(Long tagId, int increment);
    
    /**
     * 获取标签总数
     * @return 标签总数
     */
    long getTotalTagCount();
}
